// 导入组件类型定义
import { ComponentType } from './index';
// 导入CSS属性类型定义，用于定义样式对象
import type { CSSProperties } from 'vue';
// 导入Element Plus组件库中Col和Button的类型定义，但被注释掉了
// import type { ElCol, ElButton } from 'element-plus';
// 导入Element Plus组件库中Col和Button组件的属性定义
import type { ColProps } from 'element-plus/es/components/col/src/col';
import type { ButtonProps } from 'element-plus/es/components/button/src/button';

// 定义一个接口，用于表单渲染时返回的参数
export interface RenderReturnParams {
  schema: FormSchema; // 表单模式定义
  values: Recordable; // 表单值
  model: Recordable; // 表单模型
  field: string; // 字段名
}

// 定义一个接口，用于组件的属性
export interface componentProps {
  options?: any[]; // 选项列表
  placeholder?: string; // 占位符
  showButton?: boolean; // 是否显示按钮
  onInput?: () => Recordable; // 输入事件处理函数
  onChange?: () => Recordable; // 改变事件处理函数
}

// 定义一个接口，用于表单项的定义
export interface FormSchema {
  field: string; // 字段名
  label?: string; // 标签
  labelMessage?: string; // 标签信息
  labelMessageStyle?: CSSProperties; // 标签信息样式
  defaultValue?: any; // 默认值
  component?: ComponentType; // 组件类型
  componentProps?: any; // 组件属性
  slot?: string; // 插槽
  rules?: object | object[]; // 验证规则
  rowProps?: ColProps; // 行属性
  colProps?: ColProps; // 列属性
  isFull?: boolean; // 是否占满
  suffix?: string; // 后缀
  showFeedback?: boolean; // 是否显示反馈
  showLabel?: boolean; // 是否显示标签
  requireMarkPlacement?: string; // 必填标记位置
  hidden?: boolean | ((renderCallbackParams: RenderReturnParams) => boolean); // 是否隐藏
}

// 定义一个接口，用于表单的属性
export interface FormProps {
  model?: Recordable; // 表单模型
  labelWidth?: number | string; // 标签宽度
  schemas?: FormSchema[]; // 表单项数组
  inline: boolean; // 是否内联
  layout?: string; // 布局
  size: string; // 尺寸
  labelPlacement: string; // 标签位置
  isFull: boolean; // 是否占满
  showActionButtonGroup?: boolean; // 是否显示操作按钮组
  showResetButton?: boolean; // 是否显示重置按钮
  resetButtonOptions?: Partial<ButtonProps>; // 重置按钮属性
  showSubmitButton?: boolean; // 是否显示提交按钮
  showAdvancedButton?: boolean; // 是否显示高级按钮
  submitButtonOptions?: Partial<ButtonProps>; // 提交按钮属性
  submitButtonText?: string; // 提交按钮文本
  resetButtonText?: string; // 重置按钮文本
  rowProps?: ColProps; // 行属性
  colProps?: ColProps; // 列属性
  resetFunc?: () => Promise<void>; // 重置函数
  submitFunc?: () => Promise<void>; // 提交函数
  submitOnReset?: boolean; // 是否在重置时提交
  baseGridStyle?: CSSProperties; // 基础网格样式
  draggable?: boolean; // 是否可拖拽
  collapsed?: boolean; // 是否折叠
  collapsedRows?: number; // 折叠行数
}

// 定义一个接口，用于表单操作的行为
export interface FormActionType {
  submit: () => Promise<any>; // 提交表单
  setProps: (formProps: Partial<FormProps>) => Promise<void>; // 设置属性
  setSchema: (schemaProps: Partial<FormSchema>) => Promise<void>; // 设置表单项
  setFieldsValue: (values: Recordable) => void; // 设置字段值
  clearValidate: (name?: string | string[]) => Promise<void>; // 清除验证
  getFieldsValue: () => Recordable; // 获取字段值
  resetFields: () => Promise<void>; // 重置字段
  validate: (nameList?: any[]) => Promise<any>; // 验证字段
  setLoadingSub: (status: boolean) => void; // 设置加载子状态
}

// 定义一个类型，用于注册表单实例的函数
export type RegisterFn = (formInstance: FormActionType) => void;

// 定义一个类型，用于表单的返回类型
export type UseFormReturnType = [RegisterFn, FormActionType];
